Skip to content

Release#710

Merged
scazan merged 14 commits intomainfrom
dev
Mar 5, 2026
Merged

Release#710
scazan merged 14 commits intomainfrom
dev

Conversation

@scazan
Copy link
Collaborator

@scazan scazan commented Mar 4, 2026

nourmalaeb and others added 14 commits February 27, 2026 08:28
The store was being seeded every time a section loads, resulting in
stale data. Probably need a more thorough refactor, but this fix ensures
the store hydrates only once per page load.

This also updates the create process instance e2e test
## Summary
- Nest flat config fields (`categories`, `requireCategorySelection`,
`allowMultipleCategories`, `organizeByCategories`,
`requireCollaborativeProposals`, `isPrivate`) under a `config` object in
the process builder store, aligning the client-side shape with the
server's `InstanceData.config`
- Rename `FormInstanceData` → `ProcessBuilderInstanceData` and replace
local `ProposalTemplate` type alias with `ProposalTemplateSchema` from
`@op/common`
- Add config-aware shallow merge in `setInstanceData` and the store
initializer so per-section partial config updates don't clobber each
other

---
- To see the specific tasks where the Asana app for GitHub is being
used, see below:
  - https://app.asana.com/0/0/1213454016355586
## Summary

- Gives admins a live preview of how reviewers will experience the
rubric form, reducing the guesswork when configuring scoring criteria
- Lays the groundwork for the full rubric builder by adopting the same
split-pane layout used in the proposal template editor (blank left panel
for now, participant preview on the right)
- Gated behind the `rubric_builder` PostHog feature flag — production
users still see the "coming soon" placeholder until the builder is ready
## Summary

Adds per-criterion rationale fields so reviewers can provide written
reasoning alongside their scores — matching the "Require reasoning for
scores" toggle in the rubric editor designs.

No backend changes needed — rationale fields are regular JSON Schema
properties validated by AJV like everything else.

## Demo
<img width="1707" height="1171" alt="CleanShot 2026-02-26 at 20 32 34"
src="https://github.com/user-attachments/assets/6beedf98-ee0d-4516-a32a-1dbb778315ba"
/>
This ensures that all translation keys are properly typed against the
dictionary. It makes sure that we never have translations keys that
don't exist in the dictionary with translations.

Typecheck now flags these situations and your IDE should also be showing
it as an error.
### Example with a bad translation key
<img width="515" height="137" alt="Screenshot 2026-02-26 at 13 08 04"
src="https://github.com/user-attachments/assets/8964ee28-6788-4dea-b184-5a4231fb91a7"
/>
Needed to properly set overflow on the parent container. Also adjusted
where we set `[scrollbar-gutter:stable]` which prevents layout shift
when the scrollbar appears
)

## Summary
- Move `ProcessPhase` type from scattered UI component definitions to a
single export from `@op/api/encoders`
- Replace legacy `processSchemaEncoder` with a modern phase-based format
using passthrough for flexibility
- Delete `apps/app/src/components/decisions/types.ts` (no longer needed)

**Part 1 of 3** in the transition scheduling logic stack:
1. **This PR** — Encoder/UI type consolidation
2. `transition-scheduling-core` — Core scheduling logic
3. `transition-scheduling-tests` — Test suite

## Test plan
- [ ] `pnpm typecheck` passes
- [ ] `pnpm format:check` passes
- [ ] No behavioral changes — pure refactoring
Adds a loading state for the Button component in @op/ui so we can have a
consistent loading state experience. Also ensures that loading states
don't change the size of the Button itself.


https://apps-workshop-git-button-loading-state-oneproject.vercel.app/?path=/docs/button--docs

<img width="266" height="663" alt="Screenshot 2026-03-03 at 17 11 00"
src="https://github.com/user-attachments/assets/9e05ef0d-15e7-4766-8a60-2cd57ddbdf61"
/>
Support translations in the proposal listing and update the proposal
template fields to support translations as well.
A follow up PR will enable translations for english-speakers as well.

### AFTER
<img width="1170" height="710" alt="Screenshot 2026-03-03 at 11 18 10"
src="https://github.com/user-attachments/assets/f43406d4-377e-4f15-94c7-0943f0ab5e1b"
/>
<img width="738" height="784" alt="Screenshot 2026-03-03 at 11 26 59"
src="https://github.com/user-attachments/assets/84a12dda-079c-4c7f-a4df-74a9589f0275"
/>

### BEFORE
<img width="1152" height="647" alt="Screenshot 2026-03-03 at 11 29 05"
src="https://github.com/user-attachments/assets/69aa9afc-c11f-4157-b3ec-b76a8153fcdc"
/>
<img width="733" height="791" alt="Screenshot 2026-03-03 at 11 28 45"
src="https://github.com/user-attachments/assets/0b20b7b3-71e9-40e8-b44a-2e60a9cd4598"
/>
Shows the pending invites in the invite modal for the decision invite
modal. A follow up PR updates the role display to a dropdown selector.

<img width="1125" height="431" alt="Screenshot 2026-03-02 at 13 40 25"
src="https://github.com/user-attachments/assets/3da2d0e6-2bf9-4940-b31c-c0a3c444cfd4"
/>


---
- To see the specific tasks where the Asana app for GitHub is being
used, see below:
  - https://app.asana.com/0/0/1213319501728175
Fixes the sizing on the "Add Budget" component so that it remains the
same size when you focus. Also converts the currency display to better
match that currency's format.
We also now size the input and the Add Budget to whichever of the two
are larger (placeholder text in the input vs the "Add Budget" text in
the button) since this varies by locale.

### Budget entry
<img width="207" height="154" alt="Screenshot 2026-03-03 at 17 47 10"
src="https://github.com/user-attachments/assets/cde8079b-a091-4b80-bf5e-8dce1d49cfaf"
/>
<img width="372" height="297" alt="Screenshot 2026-03-03 at 17 47 17"
src="https://github.com/user-attachments/assets/133505aa-b3cb-4151-be52-f323594c5969"
/>
<img width="391" height="317" alt="Screenshot 2026-03-03 at 17 47 35"
src="https://github.com/user-attachments/assets/73a23537-f565-4959-988f-ec62109087c6"
/>
<img width="195" height="162" alt="Screenshot 2026-03-03 at 17 47 41"
src="https://github.com/user-attachments/assets/33cedce9-6e66-48d1-8a21-8e7afb274f1c"
/>


### Currency displays
<img width="327" height="249" alt="Screenshot 2026-03-03 at 17 20 48"
src="https://github.com/user-attachments/assets/d1ca0ce0-f167-4fc0-915b-717dc8961d85"
/>
<img width="404" height="251" alt="Screenshot 2026-03-03 at 17 20 54"
src="https://github.com/user-attachments/assets/743ce3fc-3091-42fc-8768-a913afec0be3"
/>
<img width="324" height="235" alt="Screenshot 2026-03-03 at 17 20 20"
src="https://github.com/user-attachments/assets/53f8fe86-3899-47c3-bc53-8e688886f3ad"
/> (Swedish Krona)
Fixes race conditions in a single call that uses batched requests by
caching the auth call so it is re-used for the whole of the batch.
Helps to address token refresh issues for users.
## Summary

Adds the rubric editor UI to the Process Builder, allowing process
owners to define review criteria (scored, yes/no, text response) that
reviewers use to evaluate proposals.

## What's included

- **Rubric template utilities** (`rubricTemplate.ts`) — pure functions
for creating, reading, and immutably updating rubric JSON Schema, with
typed helpers to eliminate boilerplate
- **Criterion cards** — collapsible accordion cards with drag-and-drop
reordering, inline name/description editing, type switching via radio
group, and scored config (max points, score labels)
- **Scored config caching** — switching away from "scored" type and back
restores the previous scale/labels
- **Delete confirmation modal** — follows the same pattern as phases
editor
- **Empty state** — matches the proposal categories pattern (`LuLeaf`
icon)
- **Debounced auto-save** to the process builder store
- **Live participant preview** of the rubric form
- **Translation keys** added to all 5 language files
- Gated behind `rubric_builder` feature flag

## Not included

- Autosave-on-initial-load fix (planned for a separate branch)
- Field-level validation on blur

## Testing

Use the [preview
deployment](https://app-git-rubric-editor-ui-oneproject.vercel.app/).
Make sure you have a phase with "Enable proposal review" toggled on.
@vercel
Copy link
Contributor

vercel bot commented Mar 5, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
app Ready Ready Preview Mar 5, 2026 9:59am

Request Review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants